package com.guia_digital;

import android.app.AlertDialog;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;

public class MapaActivity extends MapActivity implements LocationListener {

	private MapView mapa;
	private MapController controller;
	private MeuOverlay overlay;
	private LocationManager locationManager;
	Intent intent;
	double dest_lat;
	double dest_lon;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.mapa);
		// O LocationManager vai registrar e desregistrar
		// a classe para ouvir eventos do GPS
		locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

		// Configurando a MapView
		mapa = (MapView) findViewById(R.id.mapa1);
		// Habilita os botões de Zoom
		mapa.setBuiltInZoomControls(true);
		// Mostra em modo satélite
		mapa.setSatellite(false);

		// Faz o intent receber os dados passados pela última activity
				// (AgendolaActivity)
				intent = getIntent();
				dest_lat = intent.getDoubleExtra("lat", 0);
				dest_lon = intent.getDoubleExtra("lon", 0);
		
		// O MapController 'controla' o mapa :)
		controller = mapa.getController();
		controller.setZoom(17);

		// Cria a imagem que vai representar o Overlay
		Bitmap marcador = BitmapFactory.decodeResource(getResources(),
				R.drawable.ponto);

		// Cria o Overlay e adiciona ao mapView
		overlay = new MeuOverlay(marcador);
		mapa.getOverlays().add(overlay);

		double last_lat = -21.976161;
		double last_lng = -46.793518;

		//Recebe a úlitma localização conhecida
		Location loc = locationManager
				.getLastKnownLocation(LocationManager.GPS_PROVIDER);

		last_lat = loc.getLatitude();
		last_lng = loc.getLongitude();

		GeoPoint geopoint = new GeoPoint((int) last_lat, (int) last_lng);
		controller.setCenter(geopoint);
		overlay.setGeopoint(geopoint);

MensagemAlerta("Latitude - Longitude", ""+dest_lat+"|"+dest_lon);
		
		new RotaAsyncTask(mapa).execute(
		// Latitude, Logintude de Origem
				last_lat, last_lng,
				// Latitude, Longitude de Destino
				dest_lat, dest_lon);
	}

	@Override
	protected void onResume() {
		super.onResume();
		// Registrando a Activity para receber notificações
		// de mudança na posição GPS
		locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,
				0, this);
		locationManager.requestLocationUpdates(
				LocationManager.NETWORK_PROVIDER, 0, 0, this);
	}

	@Override
	protected void onPause() {
		super.onPause();
		// Desregistrando a Activity para receber
		// notificações de mudança na posição GPS
		locationManager.removeUpdates(this);
	}

	@Override
	protected boolean isRouteDisplayed() {
		return true;
	}

	@Override
	public void onLocationChanged(Location location) {
		// Método chamado quando a posição GPS muda
		int latitude = (int) (location.getLatitude() * 1E6);
		int longitude = (int) (location.getLongitude() * 1E6);

		GeoPoint geopoint = new GeoPoint(latitude, longitude);
		overlay.setGeopoint(geopoint);
		controller.animateTo(geopoint);

	}

	@Override
	public void onProviderDisabled(String provider) {
		// Método chamado quando o GPS é desabilitado
	}

	@Override
	public void onProviderEnabled(String provider) {
		// Método chamado quando o GPS é habilitado
	}

	@Override
	public void onStatusChanged(String provider, int status, Bundle extras) {
		// Método chamado quando o status do GPS muda.
		// Pode ser: OUT_OF_SERVICE,
		// TEMPORARILY_UNAVAILABLE e AVAILABLE
	}
	// Exibe mensagens de informações ou erros
	public void MensagemAlerta(String titulo, String texto) {
		AlertDialog.Builder Mensagem = new AlertDialog.Builder(
				MapaActivity.this);
		Mensagem.setTitle(titulo);
		Mensagem.setMessage(texto);
		Mensagem.setNeutralButton("OK", null);
		Mensagem.show();
	}
}
